package controller

import (
	"first_try/common"
	"first_try/model"
	"fmt"
	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
	"net/http"
	"time"
)

//找到所有出库信息 并传回页面上
func E_Set_All_Exports(c *gin.Context) {
	DB := common.GetDB()
	var all_exports []model.Export //结构体数组
	// 显示所有的入库信息
	result := DB.Table("Exports").Find(&all_exports)
	if result != nil {
		fmt.Println("!!")
	}
	fmt.Println(all_exports)
	c.JSON(http.StatusOK, gin.H{ //多传一些参数 可能会用到
		"code":      "200",
		"suppliers": all_exports, //试试传一个列表
		"msg":       "成功",
	})
}

//查找某一指定出库信息(网页用)
func E_Get_Export(c *gin.Context) {
	DB := common.GetDB()
	var test model.Export
	var test2 []model.Export
	request := make(map[string]interface{}) //新建一个map类型的变量request，保存前端传来的数据
	//获取参数
	fmt.Println(request)
	c.ShouldBind(&request) //将前端传过来的数据绑定到该request上
	fmt.Println(request)
	test.Export_id = request["id"].(int) //取得相应的map值 放到结构体上
	// 查询是否存在(链接数据库查)
	DB.Where("Export_id = ?", test.Export_id).First(&test2)
	if test2[0].Export_id != 0 {
		fmt.Println("成功查找到该入库信息")
		c.JSON(200, gin.H{
			"code":      "200",
			"suppliers": test2, //传一个对象
			"msg":       "成功",
		})
	} else {
		c.JSON(404, gin.H{
			"code":      "404",
			"suppliers": test2, //传一个空对象
			"msg":       "no",
		})
		fmt.Println("未找到该订单")
	}
}

//增加入库信息（页面用）
func E_Add_Export(c *gin.Context) {
	DB := common.GetDB()
	request := make(map[string]interface{}) //新建一个map类型的变量request，保存前端传来的数据
	c.ShouldBind(&request)                  //将前端传过来的数据绑定到该request上
	var test model.Export
	test.Export_id = request["Export_id"].(int) //获取前端的要增加的属性
	test.Export_storehouse_id = request["Export_storehouse_id"].(string)
	test.Export_business = request["Export_business"].(string)
	test.Export_fee = request["Export_fee"].(float32)
	test.Export_piece = request["Export_piece"].(int)
	test.Export_date = request["Export_date"].(time.Time)
	test.Export_ton = request["Export_ton"].(float32)
	test.Export_waybill = request["Export_waybill"].(string)

	fmt.Println(request)
	//获取到新增供应商的所有信息
	if Insert_Export(DB, test) {
		//没找到，可以新建
		c.JSON(200, gin.H{
			"code": "200",
			"msg":  "添加成功",
		})
		fmt.Println("添加成功")
	} else {
		//能找到，就不可以新建
		c.JSON(404, gin.H{
			"code": "404",
			"msg":  "添加失败",
		})
		fmt.Println("添加失败")
	}
}

//删除指定出库信息（页面用）
func E_Delete_Export(c *gin.Context) {
	DB := common.GetDB()
	request := make(map[string]interface{}) //新建一个map类型的变量request，保存前端传来的数据
	c.ShouldBind(&request)                  //将前端传过来的数据绑定到该request上
	var test model.Export
	test.Export_id = request["Export_id"].(int) //获取前端的要删除的出库的id
	if Delete_Export(DB, test) {
		//删除成功
		c.JSON(200, gin.H{
			"code": "200",
			"msg":  "删除成功",
		})
		fmt.Println("删除成功")
	} else {
		//删除失败
		c.JSON(404, gin.H{
			"code": "404",
			"msg":  "删除失败",
		})
		fmt.Println("删除失败")
	}
}

//修改指定入库信息（页面用）
func E_Modify_Export(c *gin.Context) {
	DB := common.GetDB()
	request := make(map[string]interface{}) //新建一个map类型的变量request，保存前端传来的数据
	c.ShouldBind(&request)                  //将前端传过来的数据绑定到该request上
	var test model.Export
	test.Export_id = request["Export_id"].(int) //获取前端的要增加的属性
	test.Export_storehouse_id = request["Export_storehouse_id"].(string)
	test.Export_business = request["Export_business"].(string)
	test.Export_fee = request["Export_fee"].(float32)
	test.Export_piece = request["Export_piece"].(int)
	test.Export_date = request["Export_date"].(time.Time)
	test.Export_ton = request["Export_ton"].(float32)
	test.Export_waybill = request["Export_waybill"].(string)

	//获取到全部修改信息

	if Modify_Export(DB, test) {
		c.JSON(200, gin.H{
			"code": "200",
			"msg":  "删除成功",
		})
	} else {
		c.JSON(404, gin.H{
			"code": "404",
			"msg":  "删除失败",
		})
	}
}

//查询出库号是否存在
func Find_Export(db *gorm.DB, test model.Export) bool {
	var find_export model.Export
	db.Where("Export_id = ?", test.Export_id).First(&find_export)
	if find_export.Export_id != 0 {
		fmt.Println(find_export.Export_id)
		return true
	}
	return false
}

//添加出库信息
func Insert_Export(db *gorm.DB, test model.Export) bool {
	if Find_Export(db, test) {
		fmt.Println("该出库信息已经存在！")
		return false
	} else {
		db.Create(&test)
		fmt.Println("添加成功")
		return true
	}
}

//删除出库信息
func Delete_Export(db *gorm.DB, test model.Export) bool {
	if Find_Export(db, test) {
		fmt.Println("已经找到该出库信息")
		db.Where("Export_id = ?", test.Export_id).Delete(&test)
		return true
	} else {
		fmt.Println("该出库信息不存在")
	}
	return false
}

//修改出库信息
func Modify_Export(db *gorm.DB, test model.Export) bool {
	if Find_Export(db, test) {
		fmt.Println("已经找到该出库信息")
		db.Model(&test).Where("Export_id = ?", test.Export_id).Updates(
			model.Export{
				Export_id:            test.Export_id,
				Export_date:          test.Export_date,
				Export_fee:           test.Export_fee,
				Export_piece:         test.Export_piece,
				Export_ton:           test.Export_ton,
				Export_storehouse_id: test.Export_storehouse_id,
				Export_business:      test.Export_business,
				Export_waybill:       test.Export_waybill,
			},
		)
		fmt.Println("修改完成")
		return true
	} else {
		fmt.Println("并不存在该出库信息")
	}
	return false
}
